package pe.com.casadesign.service.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.com.casadesign.dao.ClienteDAO;
import pe.com.casadesign.domain.Cliente;
import pe.com.casadesign.domain.ListaCliente;
import pe.com.casadesign.domain.OperacionResultado;
import pe.com.casadesign.service.ClienteService;
import pe.com.casadesign.service.util.Constantes;

/**
 * Implementacion de ClienteService.
 * 
 * @author Pedro Vera
 * 
 */
@Service
public class ClienteServiceImpl implements ClienteService {
	private static final Logger logger = LoggerFactory.getLogger(ClienteServiceImpl.class);

    @Autowired
    private ClienteDAO clienteDAO;
    
	@Override
	public ListaCliente listarCliente(Cliente cliente) {
		return clienteDAO.listarCliente(cliente);
	}

	@Override
	public Cliente obtenerCliente(Cliente cliente) {
		return clienteDAO.obtenerCliente(cliente);
	}
	
	@Override
	public Cliente obtenerClientePorDocumento(Cliente cliente) {
		return clienteDAO.obtenerClientePorDocumento(cliente);
	}

	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado registrarCliente(Cliente cliente) {
		boolean resultado = clienteDAO.registrarCliente(cliente);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}

	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado modificarCliente(Cliente cliente) {
		boolean resultado = clienteDAO.modificarCliente(cliente);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}

	@Override
	public OperacionResultado eliminarCliente(Cliente cliente) {
		boolean resultado = clienteDAO.eliminarCliente(cliente);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}

}
